<?php
    require_once 'dbconnect.php';
    require_once 'class/salle.class.php';
    
    function fillBatiments($db)
    {
        // Ecriture de la requette
        $batimentQuery = 'SELECT IdBatiment, LibBatiment FROM Batiment';
        $htmlData = '';
        $i = 0;

        // Exécution de la requête
        $batimentResult = $db->query($batimentQuery);
        // Parcours des résultats
        foreach($batimentResult as $batiment)
        {
            // On stocke dans une variable les résultats sous forme HTML
            $htmlData .= '<option value="' . $batiment['IdBatiment'] . '" ' . ($i == 0 ? 'selected="selected"' : '') . '>' . $batiment['LibBatiment'] .'</option>';
            $i++;
        }
        
        // On retourne le code HTML
        return $htmlData;
    }
    
    function fillEtages($db)
    {
        // Ecriture de la requête
        $etageQuery = 'SELECT IdEtage, LibEtage FROM Etage E, Batiment B WHERE E.IdBatiment = B.IdBatiment AND (';
        // Création d'un tableau qui contiendra les différents paramètres à donner à la requête
        $etagesParam = array();
        $htmlData = '';
        $i = 0;

        // Parcours des paramètres à fournir à la requête
        foreach($_POST['batimentValue'] as $index => $batimentValue)
        {
            // Ajout des conditions nécéssaires à la requête pour qu'elle prenne en compte
            // les différents étages en fonction des différents bâtiments demandés
            $etageQuery .= 'E.IdBatiment = ?' . ($index !== count($_POST['batimentValue']) - 1 ? ' OR ' : ')');
            // On ajoute les paramètres au tableau de paramètres
            $etagesParam[] = $batimentValue;
        }
        //echo $etageQuery;
        // On prépare la requête
        $etageResult = $db->prepare($etageQuery);
        // On exécute la requête
        $etageResult->execute($etagesParam);
        // Parcours des résultats
        foreach($etageResult as $etage)
        {
            // On stocke dans une variable les résultats sous forme HTML
            $htmlData .= '<option value="' . $etage['IdEtage'] . '" ' . ($i == 0 ? 'selected="selected"' : '') . '>' . $etage['LibEtage'] . '</option>';
            $i++;
        }
        
        // On retourne le code HTML
        return $htmlData;
    }
    
    function search($db)
    {
        // Ecriture de la requête
        $query =
'SELECT LibBatiment, LibEtage, LibSalle, IdSalle, SuperficieSalle, PlacesSalle, HasProjecteur FROM
SALLE S, BATIMENT B, ETAGE E
WHERE S.IdBatiment = B.IdBatiment
AND S.IdEtage = E.IdEtage
AND E.IdBatiment = B.IdBatiment
AND (';
        // Création d'un tableau qui contiendra les différents paramètres à donner à la requête
        $queryParam = array();
        $htmlData = '';
        $nbLignes = 0;
                
        foreach($_POST['batimentValue'] as $index => $batimentValue)
        {
            // On ajoute les conditions pour le(s) bâtiment(s)
            $query .= 'S.IdBatiment = ?' . ($index !== count($_POST['batimentValue']) - 1 ? ' OR ' : ')');
            // On stocke les paramètres
            $queryParam[] = $batimentValue;
        }
        
        $query .= ' AND (';
        
        foreach($_POST['etageValue'] as $index => $etageValue)
        {
            // On ajoute les conditions pour l'(es) étage(s)
            $query .= 'S.IdEtage = ?' . ($index !== count($_POST['etageValue']) - 1 ? ' OR ' : ')');
            // On stocke les paramètres
            $queryParam[] = $etageValue;
        }
        
        // Si le nombre de places entré est un nombre
        if(is_numeric($_POST['nbPlaces']))
        {
            // On ajoute la condition pour le nombre de places
            $query .= ' AND S.PlacesSalle >= ?';
            // On stocke le paramètre
            $queryParam[] = $_POST['nbPlaces'];
        }
        
        // On ajoute la condition pour le projecteur
        $query .= ' AND S.HasProjecteur = ?';
        // On stocke le paramètre
        $queryParam[] = $_POST['hasProjecteur'] === 'true' ? 1 : 0;
        
        // On prépare la requête
        $queryResult = $db->prepare($query);
        // On exécute la requête
        $queryResult->execute($queryParam);
        
        // On stocke dans une variable les résultats sous forme HTML
        $htmlData .= '<table>';
        foreach($queryResult as $resultat)
        {
            $htmlData .= '<tr>';
            $salle = new Salle(
                $resultat['LibBatiment'],
                $resultat['LibEtage'],
                utf8_encode($resultat['LibSalle']),
                $resultat['IdSalle'],
                $resultat['SuperficieSalle'],
                $resultat['PlacesSalle'],
                $resultat['HasProjecteur']
            );
            $htmlData .= '<td>' . $salle . '</td>';
            $htmlData .= '</tr>';
            $nbLignes++;
        }
        $htmlData .= '</table><h4>Résultats (' . $nbLignes . ')</h4>';
        //echo $query;
        
        // On retourne le code HTML
        return $htmlData;
    }
    
    if(isset($_POST['field']))
    {
        $htmlData = '';
        switch($_POST['field'])
        {
            case 'batiment':
                $htmlData = fillBatiments($db);
                break;
            case 'etage':
                if(isset($_POST['batimentValue']))
                {
                   $htmlData = fillEtages($db);
                }
                break;
            case 'search':
                if(isset($_POST['batimentValue']) && isset($_POST['etageValue']) && isset($_POST['nbPlaces']) && isset($_POST['hasProjecteur']))
                {
                    $htmlData = search($db);
                }
            default:
                break;
        }
        echo $htmlData;
    }
?>
